home *** CD-ROM | disk | FTP | other *** search
/ Dictionaries & Language / Dictionaries and Language (Chestnut CD-ROM) (1993).iso / misc / vb30 / vb-blk1.inc < prev    next >
Encoding:
Text File  |  1986-02-07  |  9.6 KB  |  368 lines

  1.  
  2. {************************************************************************}
  3. {*                                                                      *}
  4. {*           VB Support Procedures and Functions -- Block 1             *}
  5. {*                                                                      *}
  6. {*         Spaces             Beep                   Ask                *}
  7. {*         Center             Pad                    Pause              *}
  8. {*         ReadResponse       PrintPageHeader        List               *}
  9. {*         Exist              ExistFile              AskDir             *}
  10. {*         GetListName        ReadList               WriteList          *}
  11. {*         SetPage            SetRandomOrder         SetSequence        *}
  12. {*                            StudyReport                               *}
  13. {*                                                                      *}
  14. {************************************************************************}
  15.  
  16.  
  17.   procedure Spaces (S : integer);
  18.   { write S spaces to the screen }
  19.     var
  20.       i  : integer;
  21.     begin
  22.       for i := 1 to S do
  23.         write (' ')
  24.     end;
  25.  
  26.  
  27.   procedure Beep;
  28.   { ring the console bell }
  29.     begin
  30.       write (chr(BEL))
  31.     end;
  32.  
  33.  
  34.   function Ask(S : AnyString): boolean;
  35.   { ask a yes/no question and get the response }
  36.     var
  37.       i  : integer;
  38.       ch : char;
  39.     begin
  40.       spaces(12);
  41.       write (S + ' (Y/N)? ');
  42.       repeat
  43.         read (kbd,ch);
  44.         if ch in ['Y','y']
  45.           then
  46.             write ('Yes')
  47.           else
  48.             if ch in ['N','n']
  49.               then
  50.                 write ('No')
  51.               else
  52.                 Beep
  53.       until (ch in ['Y','y','N','n']);
  54.       ask := (ch in ['Y','y'])
  55.     end;
  56.  
  57.  
  58.   procedure Center (S : AnyString; LineFeed : boolean);
  59.   { center a string on the console screen }
  60.     var
  61.       i : integer;
  62.     begin
  63.       i := (77 - length(S)) div 2;
  64.       spaces (i);
  65.       write (S);
  66.       if LineFeed
  67.         then
  68.           writeln
  69.     end;
  70.  
  71.  
  72.   function Pad(S: FullWord; L: integer): FullWord;
  73.   { pad a string with blanks }
  74.     var
  75.       NumBlanks : integer;
  76.       i         : integer;
  77.       SS        : FullWord;
  78.     begin
  79.       NumBlanks := L - length(S) + 5;
  80.       SS := S;
  81.       for i := 1 to NumBlanks do
  82.         SS := SS + ' ';
  83.       Pad := SS
  84.     end;
  85.  
  86.  
  87.   procedure Pause;
  88.   { give 'em a chance to read the screen }
  89.     begin
  90.       GoToXY (1,24);
  91.       spaces(14);
  92.       write ('Press any character to continue...');
  93.       read (kbd,Response)
  94.     end;
  95.  
  96.  
  97.   procedure ReadResponse (Answers: Charset);
  98.   { get a character from the keyboard }
  99.     begin
  100.       center ('What is your pleasure? ',FALSE);
  101.       repeat
  102.         read (kbd,Response);
  103.         Response := UpCase(Response);
  104.         if not (Response in Answers)
  105.           then
  106.             Beep
  107.           else
  108.             write (Response)
  109.       until (Response in Answers)
  110.     end;
  111.  
  112.  
  113.   procedure PrintPageHeader (SubHead : AnyString);
  114.   { put a standard header at the top of the console screen }
  115.     var
  116.       i          : integer;
  117.       UnderScore : AnyString;
  118.     begin
  119.       ClrScr;
  120.       for i := 1 to 78 do
  121.         write ('-');
  122.       writeln ('-');
  123.       center (Language + ' Vocabulary Builder -- ' + VerMsg,TRUE);
  124.       for i := 1 to 78 do
  125.         write ('-');
  126.       writeln ('-');
  127.       if length(SubHead) > 0
  128.         then
  129.           begin
  130.             writeln;
  131.             center(SubHead,TRUE);
  132.             UnderScore := '';
  133.             for i := 1 to length(SubHead) do
  134.               UnderScore := UnderScore + '-';
  135.             center(UnderScore,TRUE)
  136.           end
  137.     end;
  138.  
  139.  
  140.   procedure List (ch: char;var FileID: text);
  141.   { list selected help text }
  142.     var
  143.       i         : integer;
  144.       line      : TextString;
  145.     begin
  146.       reset (FileID);
  147.       repeat
  148.         readln (FileID, line)
  149.       until EOF(FileID) or (line[1] = ':') and (line[2] = ch);
  150.       readln (FileID,line);
  151.       while (line[1] <> ':') and not EOF(FileID) do
  152.         begin
  153.           for i := 1 to length(line) do
  154.             if line[i] <> LangFlag
  155.               then
  156.                 write (line[i])
  157.               else
  158.                 write (Language);
  159.           write (chr(CR),chr(LF));
  160.           readln (FileID,line)
  161.         end
  162.       end;
  163.  
  164.  
  165.   function Exist (var FileID : text; FName : AnyString): boolean;
  166.   { check for the existence of a text file on disk }
  167.     begin
  168.       assign (FileID,FName);
  169.       {$I-} reset (FileID) {$I+};
  170.       Exist := (IOresult = 0)
  171.     end;
  172.  
  173.  
  174.   function ExistFile (var FileID : ListFile; FName : AnyString): boolean;
  175.   { check for the existence of a word list file on disk }
  176.     begin
  177.       assign (FileID,FName);
  178.       {$I-} reset (FileID) {$I+};
  179.       ExistFile := (IOresult = 0)
  180.     end;
  181.  
  182.  
  183.   procedure AskDir;
  184.   { check to see if a directory listing is required }
  185.     begin
  186.       if ask ('Would you like to see what lists are available')
  187.         then
  188.           begin
  189.             writeln;
  190.             DirWordList
  191.           end
  192.         else
  193.           writeln
  194.     end;
  195.  
  196.  
  197.   procedure GetListName(var N: ListName; Prompt: AnyString; TypeOfGet: integer);
  198.   { prompt for the name of a word list }
  199.     begin
  200.       if TypeOfGet = 1
  201.         then
  202.           begin
  203.             spaces(12);
  204.             write ('Which list would you like to ',Prompt,'? ')
  205.           end
  206.         else
  207.           begin
  208.             spaces(12);
  209.             write (Prompt,'? ')
  210.           end;
  211.       readln (N)
  212.     end;
  213.  
  214.  
  215.   procedure ReadList (var N: integer; var List: WordList; var Name: ListName);
  216.   { fetch a word list into memory }
  217.     var
  218.       FileID     : ListFile;
  219.       FName      : FileName;
  220.       i          : integer;
  221.     begin
  222.       for i := 1 to length(Name) do
  223.         Name[i] := UpCase(Name[i]);
  224.       FName := Name + '.' + Extent;
  225.       N := 0;
  226.       if ExistFile(FileID,FName)
  227.         then
  228.           begin
  229.             while not EOF(FileID) do
  230.               begin
  231.                 N := N + 1;
  232.                 read (FileID,List[N])
  233.               end;
  234.             close (FileID)
  235.           end
  236.         else
  237.           begin
  238.             writeln;
  239.             spaces(12);
  240.             write ('I can''t find that list.')
  241.           end
  242.     end;
  243.  
  244.  
  245.   procedure WriteList (N: integer;List: WordList; var Name: ListName);
  246.   { write a word list to disk }
  247.     var
  248.       FileID     : ListFile;
  249.       FName      : FileName;
  250.       i          : integer;
  251.     begin
  252.       for i := 1 to length(Name) do
  253.         Name[i] := UpCase(Name[i]);
  254.       FName := Name + '.' + Extent;
  255.       assign (FileID,FName);
  256.       rewrite (FileID);
  257.       for i := 1 to N do
  258.         write (FileID,List[i]);
  259.       close (FileID)
  260.     end;
  261.  
  262.  
  263.   procedure SetPage (Header: AnyString; SP1: integer; Col1: AnyString;
  264.                      SP2: integer; Col2: AnyString);
  265.   { repaint the screen with appropriate headers }
  266.     begin
  267.       PrintPageHeader(Header);
  268.       writeln;
  269.       spaces(Sp1);
  270.       write (Col1);
  271.       spaces(Sp2);
  272.       write (Col2)
  273.     end;
  274.  
  275.  
  276.   procedure SetRandomOrder (var Order: Ordering; N: integer);
  277.   { select a random ordering for list presentation }
  278.     var
  279.       Flag    : OrderFlag;
  280.       i,j     : integer;
  281.     begin
  282.       Randomize;
  283.       for i := 1 to N do
  284.         Flag[i] := ' ';
  285.       j := 1;
  286.       while j <= N do
  287.         begin
  288.           i := round(random(N)+1.0);
  289.           if Flag[i] = ' '
  290.             then
  291.               begin
  292.                 Order[j] := i;
  293.                 Flag[i] := '*';
  294.                 j := succ(j)
  295.               end
  296.         end
  297.     end;
  298.  
  299.  
  300.   function SetSequence(T: boolean): boolean;
  301.   { find out in which direction to present the word list }
  302.     var
  303.       ch  : char;
  304.     begin
  305.       writeln;
  306.       spaces(12);
  307.       writeln ('How would you like the word list presented:');
  308.       writeln;
  309.       center ('E)nglish to ' + Language,TRUE);
  310.       center (copy(Language,1,1) + ')' + copy(Language,2,length(Language)-1)
  311.                 + ' to English',TRUE);
  312.       if T
  313.         then
  314.           center ('R)andom ordering',TRUE);
  315.       writeln;
  316.       ch := copy(Language,1,1);
  317.       ch := UpCase(ch);
  318.       ReadResponse(['E',ch,'R']);
  319.       SetSequence := (Response = 'E')
  320.     end;
  321.  
  322.  
  323.   procedure StudyReport(Np, Nc: integer; TestFlag: boolean; WList: WordList;
  324.                         WName: ListName; TArray: Ordering);
  325.   { tell 'em how they did }
  326.     var
  327.       PctCorrect : real;
  328.       Header     : AnyString;
  329.       i, j       : integer;
  330.     begin
  331.       If TestFlag
  332.         then
  333.           Header := 'Test For Mastery'
  334.         else
  335.           Header := 'Study a List';
  336.       PrintPageHeader(Header);
  337.       writeln;
  338.       center ('Results for list ' + WName,TRUE);
  339.       writeln;
  340.       spaces(25);
  341.       writeln ('Number of word-pairs: ',Np);
  342.       spaces(25);
  343.       writeln ('Number correct      : ',Nc);
  344.       spaces(25);
  345.       PctCorrect := (Nc / Np) * 100.0;
  346.       writeln ('Percentage          : ',PctCorrect:4:1);
  347.       if TestFlag and (Nc < Np)
  348.         then
  349.           begin
  350.             writeln;
  351.             center ('You probably need to study these words a bit more:',TRUE);
  352.             writeln;
  353.             for i := 1 to  Np do
  354.               begin
  355.                 if TArray[i] = 1
  356.                   then
  357.                     begin
  358.                       j := 36 - length(WList[i].EnglishWord);
  359.                       spaces (j);
  360.                       writeln (WList[i].EnglishWord,'    ',Wlist[i].ForeignWord)
  361.                     end
  362.               end
  363.           end;
  364.       pause
  365.     end;
  366.  
  367.  
  368.